10 ;********************************* 20 ; 30 ; MODERN ERASE 40 ; USRUSRUSRUSRUSRUSRUSRUSRUSRUSRUSRUSR 50 ; (C) 1988 BY DIRK NEUMEISTER 60 ; 70 ; SIZE : $C000 80 ; LAENGE : 382 BYTE 90 ; SOURCE : 6515 BYTE 100 ; 110 ;********************************* 120 ; 130 ; 140 +$C000 150 ; 160 TAB(VIC=53248 170 TAB(CIA2=$DD00 180 TAB(BILD=648 190 TAB(BILD1=$0400 200 TAB(BILD2=$C400 210 ; 220 TOSATZ=$D000 230 TOZIEL=$E000 240 TOZEIGER=$FA 250 TOPOINTER=$FD 260 TOCLEAR=$E544 270 TOFLAG=$FC 280 TOKOMMA=$AEFD 290 TOGETBYTE=$B79E 300 TOGET=$0073 310 ; 320 ; 330 ; 340 ;********************************* 350 ; 360 ; AUSWERTUNG DES SYS-BEFEHLS 370 ; 380 ; SYS 49152 => LOESCHEN/ANZEIGEN 390 ; 400 ; SYS 49152,A,B,C,D,E,F,G,H 410 ; 420 ; => REIHENFOLGE FESTLEGEN 430 ; 440 ;********************************* 450 ; 460 ; 500 START MID$#","; TEST AUF KOMMA 510 LEN#00 520 STR$($7A),Y 530 (null)START3; WENN NEIN, DANN DIREKT STARTEN 540 PEEK#08; SONST ACHT ZAHLEN, DIE DIE REIHENFOLGE ANGEBEN 550 (null)$F7 560 START2 (null)KOMMA 570 (null)GETBYTE; EINLESEN UND 580 (null) 590 PEEK$F7 600 (null)REIHENFOL,X; SPEICHERN 610 CHR$$F7 620 (null)START2 630 START3 (null)ZCLEAR; SELBST MODIFZ. CODE (JMP ($4C) = LOESCHEN, 640 ; ; BIT ($2A) = LADEN ) 650 ; 660 ; 670 ; 680 ;********************************* 690 ; 700 ; VORBEREITUNG DER MODERN-ROUTINE 710 ; 720 ; ZUM ANZEIGEN 730 ; 740 ;********************************* 750 ; 760 ; 1000 ZLADEN POKEXYCLOSE(LADEBIT),VARIAB+1; ADR. VERKN.BYTE ZUM ANZEIGEN SCHREIBEN 1010 POKEXCLOSE$31,MODERN2-3; PROGRAMM FUER ZEICHENSATZLESEN AENDERN 1020 POKEXYCLOSE$D000,$FD; STARTADRESSE ZEICHENSATZ 1030 POKEXYCLOSE$E000,$FA; ENDADRESSE ZEICHENSATZ 1040 POKEXCLOSE$11,ODER; ODER-VERKNUEPUNG ZULASSEN 1050 POKEXCLOSE$A9,LDA; LDA-BEFEHL ERLAUBEN 1060 POKEXCLOSE$08,FLAG; FLAG FUER ACHT DURCHLAEUFE SETZEN 1070 (null)MODERN; DIE EIGENTLICHE ROUTINE AUFRUFEN 1080 VERSCHIEBECLOSE$C400,$C800,$0800 1090 BILD0400; UND WIEDER AUF ORIGINALBILDSCHIRM UMSCHALTEN 1100 POKEACLOSE$4C,START3; JMP-BEFEHL ERLAUBEN => SYS49152 = LOESCHEN 1110 (null) 1120 ; 1130 ; 1140 ; 1150 ;********************************* 1160 ; 1170 ; VORBEREITUNG DER MODERN-ROUTINE 1180 ; 1190 ; ZUM LOESCHEN 1200 ; 1210 ;********************************* 1220 ; 1230 ; 2000 ZCLEAR RAMCLOSE$31; ZEICHENSATZ KOPIEREN 2010 COPYCLOSESATZ,$02,ZIEL,$04,4 2020 ROM 2030 VERSCHIEBECLOSE$0400,$0800,$C800;BILDSCHIRM KOPIEREN 2040 BILDC400; UND NACH $C400 UMSCHALTEN 2050 POKEAXCLOSE(LOESCHBIT),VARIAB+1; AUF ZEICHEN LOESCHEN UMSCHALTEN 2060 POKEXCLOSE$34,MODERN2-3; ZUGRIFF AUF ROM UND NICHT AUF ZEICHENSATZ 2070 POKEXYCLOSE$E000,$FA; ZEICHENSATZ BEI $E000 KENNZEICHNEN 2080 POKEXYCLOSE$E000,$FD 2090 POKEXCLOSE$24,ODER; ODER-VERKUEPFUNG UNTERBINDEN (ODER => BIT ($24)) 2100 POKEXCLOSE$24,LDA; LDA-VERKNUEPFUNG VERBIETEN (LDA => BIT ($24)) 2110 POKEXCLOSE$08,FLAG; FLAG FUER ACHT DURCHLAEUFE SETZEN 2120 (null)MODERN; DIE EIGENTLICHE ROUTINE AUFRUFEN 2130 (null)CLEAR; BILDSCHIRM LOESCHEN 2140 POKEACLOSE$2A,START3; BEI NAECHSTEN AUFRUF: 'ZEICHEN LADEN'(KEIN JMP) 2150 (null) 2160 ; 2170 ; 2180 ; 2190 ;********************************* 2200 ; 2210 ; EIGENTLICHE ROUTINE ZUM 2220 ; 2230 ; LOESCHEN UND ERSCHEINEN LASSEN 2240 ; 2250 ;********************************* 2260 ; 2270 ; 3000 MODERN RAMCLOSE$34; RAM/ZEICHENSATZ EINSCHALTEN 3010 MODERN2 MID$REIHENFOL,X; VERKNUEPFUNGSBYTE IN ABHAENGIGKEIT DER ZU 3020 (null); BEARBEITENDEN SPEICHERSTELLE UND 3030 VARIAB MID$LADEBIT,Y; REIHENFOLGE LADEN 3040 LEN#00 3050 ASC(POINTER),Y; UND MIT DER SPEICHERSTELLE VERKNUEPFEN 3060 ODER (null)(ZEIGER),Y; (LOESCHEN: NUR 'AND', LADEN: 'AND' & 'ORA') 3070 (null)(ZEIGER),Y 3080 (null) 3090 (null)MODERN3; X UM EINS ERNIEDRIGEN, WENN KLEINER ALS 1, DANN 3100 PEEK#08; WIEDER AUF 8 SETZEN 3110 MODERN3 RIGHT$ZEIGER; ZEIGER UM EINS ERHOEHEN 3120 RIGHT$POINTER 3130 (null)MODERN4 3140 RIGHT$ZEIGER+1 3150 RIGHT$POINTER+1 3160 MODERN4 MID$ZEIGER+1; TEST OB ALLE SPEICHERSTELLEN BEARBEITET WURDEN 3170 STR$#$F0 3180 (null)MODERN2; WENN NEIN, DANN WIEDER ZURUECK UND WEITERMACHEN 3190 POKEACLOSE$E0,ZEIGER+1; ZEIGER WIEDER ZURUECKSTELLEN 3200 LDA POKEACLOSE$D0,POINTER+1 3210 (null); REIHENFOLGE DER VERKNUEFUNGSBYTE UM 1 VERRINGERN 3220 (null)MODERN5 3230 PEEK#08 3240 MODERN5 LENFLAG; TEST, OB DER ZEICHENSATZ SCHON ACHT MAL 3250 (null); BEARBEITET WORDEN IST 3260 (null)FLAG 3270 (null)MODERN2; WENN NEIN, DANN WEITER 3280 ROM; SONST ROM WIEDER EINSCHALTEN 3290 (null); UND RUECKSPRUNG 3300 ; 3310 ; 3320 ; 3330 ;********************************* 3340 ; 3350 ; TABELLEN 3360 ; 3370 ; - VERKNUEPFUNGSBYTE ZUM LOESCHEN 3380 ; 3390 ; - VERKNUEPFUNGSBYTE ZUM ANZEIGEN 3400 ; 3410 ; - REIHENFOLGE DER ANWENDUNG 3420 ; 3430 ;********************************* 3440 ; 3450 ; 10000 LOESCHBIT FN127,191,223,239,247,251,253,254 10010 LADEBIT FN128,64,32,16,8,4,2,1 10020 REIHENFOL FN0,0,7,1,6,2,5,3,4 10030 ; 10040 ; 10050 ; 10060 ;********************************* 10070 ; 10080 ; M A K R O S 10090 ; 10100 ; LOW LEVEL : - POKEAX 10110 ; - POKEXY 10120 ; - POKEA 10130 ; - POKEX 10140 ; 10150 ; HIGH LEVEL: - BILDC400 10160 ; - BILD0400 10170 ; - ROM 10180 ; - RAM 10190 ; - VERSCHIEBE 10200 ; - COPY 10210 ; 10220 ;********************************* 10230 ; 10240 ; 30000 GETPOKEAXCLOSEVAR,ADR; 16-BIT WERT SCHRIEBEN (VERWENDETE REGISTER: A,X) 30010 MID$#<(VAR) 30020 PEEK#>(VAR) 30030 (null)ADR 30040 (null)ADR+1 30050 NEW 30060 ; 30070 GETPOKEXYCLOSEVAR,ADR; 16-BIT WERT SCHREIBEN (VERWENDETE REGISTER: X,Y) 30080 PEEK#<(VAR) 30090 LEN#>(VAR) 30100 (null)ADR 30110 (null)ADR+1 30120 NEW 30130 ; 30140 GETPOKEACLOSEVAR,ADR; 8-BIT WERT SCHREIBEN (VERWENDETES REGISTER: A) 30150 MID$#VAR 30160 (null)ADR 30170 NEW 30180 ; 30190 GETPOKEXCLOSEVAR,ADR; 8-BIT WERT SCHREIBEN (VERWENDETES REGISTER: X) 30200 PEEK#VAR 30210 (null)ADR 30220 NEW 30230 ; 30240 ;* * * * * * * * * * * * * * * * * 30250 ; 30260 GETBILDC400; BILDSCHIRM IM BEREICH $C400 EINSCHALTEN 30270 MID$CIA2 30280 ASC#252 30290 (null)CIA2 30300 POKEXCLOSE196,BILD 30310 MID$VIC+24 30320 ASC#$F3 30330 (null)#24 30340 (null)VIC+24 30350 NEW 30360 ; 30370 GETBILD0400; BILDSCHIRM IM BEREICH $0400 EINSCHALTEN 30380 MID$CIA2 30390 (null)#03 30400 (null)CIA2 30410 POKEXCLOSE04,BILD 30420 MID$VIC+24 30430 ASC#$F3 30440 (null)#20 30450 (null)VIC+24 30460 NEW 30470 ; 30480 GETVERSCHIEBECLOSEANFANG,ENDE,NACH; ROM VERSCHIEBE-ROUTINE AUFRUFEN 30490 POKEXYCLOSEANFANG,$5F 30500 POKEXYCLOSEENDE,$5A 30510 POKEXYCLOSENACH,$58 30520 (null)$A3BF 30530 NEW 30540 ; 30550 GETROM; AUF ROM UMSCHALTEN 30560 (null) 30570 (null)$01 30580 (null) 30590 NEW 30600 ; 30610 GETRAMCLOSEVAR; AUF RAM/ZEICHENSATZ UMSCHALTEN 30620 (null) 30630 MID$$01 30640 (null) 30650 POKEACLOSEVAR,$01 30660 NEW 30670 ; 30680 GETCOPYCLOSEBEGINN,VAR1,ENDE,VAR2,LAENGE; 16-BIT VERSCHIEBE-ROUTINE 30690 POKEAXCLOSE(BEGINN),VAR1 30700 POKEAXCLOSE(ENDE),VAR2 30710 PEEK#LAENGE*8 30720 LEN#00 30730 COPY1 MID$(VAR1),Y 30740 (null)(VAR2),Y 30750 (null) 30760 (null)COPY1 30770 RIGHT$VAR1+1 30780 RIGHT$VAR2+1 30790 (null) 30800 (null)COPY1 30810 NEW 30820 ; 30830 ; 30840 ; 30850 ;********************************* 30860 ; 30870 ; ENDE DES QUELLCODE-LISTINGS 30880 ; 30890 ;********************************* 30900 ; 30910 ; 60000 <